package com.example.laixunlong.database;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import com.example.laixunlong.pojo.Json;

import java.util.ArrayList;
import java.util.Currency;
import java.util.List;


/*数据库操作工具类,android官方规范类*/
public class MyDatabase extends SQLiteOpenHelper {
    private static final String SQL_name="mydatabase";
    private static final String Table_name="json_table";
    private static final int version=1;
    private static MyDatabase data=null;//数据库唯一实例
    private SQLiteDatabase input_mydatabase=null;//写链接,分开的原因是两者的初始化对象是不一样的
    private SQLiteDatabase output_mydatabase=null;//读链接

    private MyDatabase(Context content)
    {
        super(content,SQL_name,null,version);
    }
    @Override/*建表方法*/
    public void onCreate(SQLiteDatabase db) {
        //首行默认主键
        String sql="CREATE TABLE json_table ( _key VARCHAR  NOT NULL, value CHAR )";
        db.execSQL(sql);//执行sql语句,该语句完全符合数据库语法规范
    }
    @Override/*版本修改方法*/
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        /*版本号会作为数据库文件中的标头写入到文件中,某一次打开数据库时发现版本号不匹配了,则执行该方法*/
    }
    //获取实例
    public static MyDatabase getInstance(Context context)
    {
        if (data==null)
        {
            data=new MyDatabase(context);
        }
        return data;
    }
    //打开读链接,无论是读链接,还是写链接,都能够在数据库不存在的情况下创建新的数据库,相关参数根据调用它的对象属性来确定,如果属性为空则报错
    public SQLiteDatabase openOutput()
    {
        if(output_mydatabase==null || !output_mydatabase.isOpen())
        {
            output_mydatabase=data.getReadableDatabase();
        }
        return output_mydatabase;
    }
    //打开写链接
    public SQLiteDatabase openInput()
    {
        if(input_mydatabase==null || !input_mydatabase.isOpen())
        {
            input_mydatabase=data.getWritableDatabase();
        }
        return input_mydatabase;
    }
    //关闭所有链接
    public void Close()
    {
        if (input_mydatabase!=null && input_mydatabase.isOpen())
        {
            input_mydatabase.close();
            input_mydatabase=null;
        }
        if(output_mydatabase!=null && output_mydatabase.isOpen())
        {
            output_mydatabase.close();
            output_mydatabase=null;
        }
    }
    //添加一行数据
    public long insert(Json json)
    {
        ContentValues value=new ContentValues();
        value.put("_key",json.getKey());
        value.put("value",json.getValue());
        return input_mydatabase.insert(Table_name,null,value);
    }
    //删除一行数据
    public long delete(String key)
    {
        //input_mydatabase.delete(Table_name,"key=?",new String[]{key});//删除所有
        /*第三个参数为遍历对象,删除数组中所有符合的值*/
        return input_mydatabase.delete(Table_name,"key=?",new String[]{key});
    }
    //修改一行数据
    public long update(Json json)
    {
        //参数(表明,写入的数据,条件,符合条件集)
        ContentValues values=new ContentValues();
        values.put("key",json.getKey());
        values.put("value",json.getValue());
        return input_mydatabase.update(Table_name,values,"key=?",new String[]{json.getKey()});
    }
    //查找数据
    public List<Json> select()
    {
        //查询所有
        List<Json> list=new ArrayList<>();
        //得到游标
        Cursor cursor=output_mydatabase.query(Table_name,null,null,null,null,null,null);
        //循环游标,获取每一行的值,于mysql不同,此处无法通过属性名选中赋值,只能通过表中顺序获取
        while (cursor.moveToNext())
        {
            Json j=new Json();
            j.setKey(cursor.getString(0));
            j.setValue(cursor.getString(1));
            list.add(j);
        }
        return list;
    }
}
